#include<iostream>
#include<unistd.h>
#include "RingQueue.cpp"

void* consumer(void* args)
{
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    while (true)
    {
        int data;
        rq->Pop(&data);
        std::cout << "消费者消费了一个数据: " << data << std::endl;
    }
    return nullptr;
}

void* product(void* args)
{
    int data = 1;
    RingQueue<int>* rq = static_cast<RingQueue<int>*>(args);
    while (true)
    {
        sleep(1);
        std::cout << "生产了一个数据: " << data << std::endl;
        rq->Equeue(data++);
    }
    return nullptr;
}

int main()
{
    // 先构建单生产者和单消费者
    RingQueue<int>* rq = new RingQueue<int>();

    pthread_t c[1], p[1];

    pthread_create(c, nullptr, consumer, rq);
    pthread_create(p, nullptr, product, rq);

    pthread_join(c[0], nullptr);
    pthread_join(p[0], nullptr);

    return 0;
}